package com.example.work.controller;

import com.example.work.entity.DbCheckCategory;
import com.example.work.service.ICategoryService;
import com.example.work.utils.R;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.work.utils.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author: javaLiuwb
 * @date: 2024-11-25 19:30
 * @description: Controller for managing categories with pagination support.
 */
@RestController
@RequestMapping("/category")
public class CategoryController {

    @Autowired
    private ICategoryService categoryService;


    @GetMapping("/getAllCategory")
    public R getCategories() {
        // 调用 Service 获取数据
        Map<String, Object> map = new HashMap<>();
        return R.ok().data(categoryService.getActiveCategories());
    }
    @GetMapping("/list")
    public R list(@RequestParam(value = "page", defaultValue = "1") int page,
                  @RequestParam(value = "size", defaultValue = "10") int size) {
        try {
            // 分页查询分类列表
            IPage<DbCheckCategory> categoryPage = categoryService.page(new Page<>(page, size));

            // 组装分页结果
            Map<String, Object> map = new HashMap<>();
            map.put("records", categoryPage.getRecords()); // 当前页数据
            map.put("total", categoryPage.getTotal()); // 总记录数
            map.put("pages", categoryPage.getPages()); // 总页数
            map.put("current", categoryPage.getCurrent()); // 当前页码
            map.put("size", categoryPage.getSize()); // 每页大小

            return R.ok(map);
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("获取列表失败：" + e.getMessage());
        }
    }

    /**
     * 保存或更新分类信息
     *
     * @param dbCheckCategory 分类数据
     * @return 操作结果
     */
    @PutMapping("/save")
    public R save(@RequestHeader("Authorization") String authorizationHeader,@RequestBody DbCheckCategory dbCheckCategory) {
        String userName = TokenUtils.getUserNameFromToken(authorizationHeader);
        try {
            if (dbCheckCategory == null) {
                return R.error("提交的数据不能为空！");
            }
            dbCheckCategory.setUpdateTime(new Date());
            if (dbCheckCategory.getId() == null) {
                dbCheckCategory.setCreateTime(new Date());
                dbCheckCategory.setUpdateTime(new Date());
                dbCheckCategory.setCreateBy(userName);
                categoryService.save(dbCheckCategory);
            } else {
                dbCheckCategory.setUpdateTime(new Date());
                categoryService.saveOrUpdate(dbCheckCategory);
            }
            return R.ok();
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("保存失败：" + e.getMessage());
        }
    }

    /**
     * 删除指定的分类信息
     *
     * @param id 分类的 ID
     * @return 删除结果
     */
    @RequestMapping("/delete/{id}")
    public R delete(@PathVariable(value = "id") String id) {
        try {
            if (id == null || id.isEmpty()) {
                return R.error("ID 不能为空！");
            }
            categoryService.removeById(id);
            return R.ok();
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("删除失败：" + e.getMessage());
        }
    }
    @PutMapping("/update/{id}")
    public R updateCategoryById(
            @PathVariable("id") String id, // 使用 @PathVariable 动态路径参数
            @RequestBody DbCheckCategory dbCheckCategory // 使用 @RequestBody 接收 JSON 数据
    )
    {
        // 打印接收到的 ID
        System.out.println("接收到的Category ID：" + id);
        // 检查路径中的 Id 是否为空
        if (id == null || id.isEmpty()) {
            return R.error("Category ID 不能为空");
        }
        // 检查请求体中的数据是否完整
        if (dbCheckCategory == null) {
            return R.error("请求体不能为空");
        }
        // 设置 dbUser 对象的 id（确保请求体中的 id 与路径参数一致）
        dbCheckCategory.setId(id);
        // 调用服务层更新方法
        boolean isUpdated = categoryService.updateCategoryById(dbCheckCategory);
        // 返回操作结果
        if (isUpdated) {
            return R.ok("修改成功");
        } else {
            return R.error("修改失败");
        }
    }
}